#include "complejo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

//Retorna 0 en caso de error o 3 en caso de éxito.
int stringToComplejo(char *str, complejo *el_complejo){
	char aux;
	if((sscanf(str, "%f+%f%c", &(*el_complejo).real, &(*el_complejo).imaginaria, &aux) < 3) || (aux != 'i')){
		if((sscanf(str, "%f-%f%c", &(*el_complejo).real, &(*el_complejo).imaginaria, &aux) < 3) || (aux != 'i'))
			return 0;
		(*el_complejo).imaginaria *= -1;
	}
	return 3;
}

void suma(complejo *un_complejo, complejo *otro_complejo, complejo *resultado){
	resultado->real = un_complejo->real + otro_complejo->real;
	resultado->imaginaria = un_complejo->imaginaria + otro_complejo->imaginaria;
}

void cuadrado(complejo *un_complejo, complejo *resultado){
	resultado->real = un_complejo->real * un_complejo->real - un_complejo->imaginaria * un_complejo->imaginaria;
	resultado->imaginaria = 2 * un_complejo->real * un_complejo->imaginaria;
}

float modulo(complejo *complex){
	return sqrt(complex->real * complex->real + complex->imaginaria * complex->imaginaria);
}

int brillo(complejo *el_complejo){

	complejo auxiliar, resultado;
	auxiliar.real = el_complejo->real;
	auxiliar.imaginaria = el_complejo->imaginaria;

	float moduloResultante = modulo(&auxiliar);
	int intensidad = 0;

	for(intensidad = 0; intensidad < MAX_INTENSIDAD; intensidad++){
		if (moduloResultante >2 ) break;

		cuadrado(&auxiliar, &resultado);
		suma(&resultado, el_complejo, &resultado);
		moduloResultante = modulo(&resultado);

		auxiliar.real = resultado.real;
		auxiliar.imaginaria = resultado.imaginaria;
	}

	return intensidad;
}
